import os
import base64
import gradio as gr
from openai import OpenAI  # 注意：这里应该使用正确的OpenAI SDK，但示例中使用了错误的URL
import subprocess

# 初始化OpenAI客户端
client = OpenAI(
    api_key="xxxx",
    base_url="xxx",
)

# 假设我们有一个函数可以调用正确的API来生成图片（这里是一个占位符函数）
def generate_image(prompt, model="Stable-Diffusion-XL"):
    # 根据用户输入生成图片
	images_base64 = client.images.generate(prompt=prompt, model=model, response_format="b64_json",size="768x768")
        # 将base64编码的图片转换为可展示的格式 图片生成三维立体画的python程序
	for i, image in enumerate(images_base64.data):
		with open("image_{}.png".format(i), "wb") as f:
			f.write(base64.b64decode(image.b64_json))
			
def main_note(audio_path):
    # 使用PaddleSpeech进行音频分类，这里假设返回的是分类结果
    # 注意：这里需要确保PaddleSpeech已正确安装，并且音频路径正确
    result = os.popen(f'paddlespeech cls --input {audio_path}').read()
    # 假设返回结果中第一个空格前是分类标签
    index = result.index(' ')
    classification_label = result[0:index]
    print(classification_label)
    return classification_label

def generate_figure(audio_path):
    # 获取音频的分类标签
    style = main_note(audio_path)
    # 构建图片生成的prompt
    desc = "xxxx" + style
    # 生成图片（这里调用的是占位符函数）
    image_base64 = generate_image(desc)
    # 将base64编码的图片转换为字节数据
    #image_bytes = base64.b64decode(image_base64)
    # 将字节数据保存为临时文件（为了Gradio显示）
    temp_image_path = "image_0.png"
    #with open(temp_image_path, "wb") as f:
    #   f.write(image_bytes)
    return temp_image_path


# 创建Gradio界面
iface = gr.Interface(
    fn=generate_figure,  # 使用我们定义的函数来生成图片
    inputs=[
        gr.Audio(label="音频输入", sources=["microphone", "upload"], type="filepath")  # 允许从麦克风或文件上传音频
    ],
    outputs=gr.Image(label="生成的图片"),  # 显示生成的图片
    title="听音画未来",
    description="通过识别环境音进行作画，例如听到鸟叫的声音画一只小鸟，听到狗叫的声音画一只小狗！"
)
# 运行Gradio应用
#iface.launch()

def run_executable():
    # 使用 subprocess.Popen 来执行 3.exe 程序
    subprocess.Popen("3.exe.lnk", shell=True)


# 使用 gr.Blocks 来组合两个接口
with gr.Blocks() as demo:
    iface.render()
    btn = gr.Button("开始作画")
    btn.click(run_executable)

# 启动 Gradio 应用
demo.launch()
